As computer technology improves, software developers continue to push the performance of technology. This is particularly true in the field of graphics technology, where new API standards are developed and proliferated to take advantage of improvements in graphics performance. One recent development is the OpenGL 2.0 standard, which institutes support for conditional execution of graphical instructions.
These conditional instructions allow for situations where a particular pixel may or may not be subject to a particular effect. For example, a software developer may use conditionals when rendering a wooden boat moving through water. Depending on various factors, e.g., the calculated weight of the boat, its speed through the water, and various weather conditions, a particular portion of the hull of the boat may or may not be wet. Conditional execution allows the programmer to program a graphics pipeline to handle either scenario. As such, the graphics pipeline can render an image faster, by requiring fewer instruction sets, than may be possible if conditional operations were not allowed.
At present, many implementations of conditional execution rely upon processing a packet both ways; that is, performing the calculations twice, once with the conditional as true, and once with the conditional as false. After both know paths have been calculated, the conditional is evaluated, and the appropriate result selected; the other result is discarded. This approach, while reasonably effective, is inefficient. The extra calculations performed to determine the discarded result represent a power drain, and may require additional time to perform, e.g., if memory access is required during the calculation.